home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 21 / Cream of the Crop 21 (Terry Blount) (October 1996).iso / editor / auror300.zip / SCRSAVER.AML < prev    next >
Text File  |  1996-07-17  |  4KB  |  165 lines

  1. //--------------------------------------------------------------------
  2. // SCRSAVER.AML
  3. // Screen Saver, (C) 1993-1996 by nuText Systems
  4. //
  5. // (see Scrsaver.dox for user help)
  6. //
  7. // This macro installs or removes a colorful screen saver.
  8. //
  9. // Usage:
  10. //
  11. // Select this macro from the Macro List (on the Macro menu), or run it
  12. // from the macro picklist <shift f12>. Re-run this macro to remove
  13. // the screen saver.
  14. //--------------------------------------------------------------------
  15.  
  16. include bootpath "define.aml"
  17.  
  18. variable attr, count, interval, minutes, obj, ecount
  19.  
  20. // draw the screen saver
  21. function drawsaver
  22.  
  23.   // change to 50-line mode
  24.   oldrows = getvidrows
  25.   videomode 80 50
  26.  
  27.   // create a dummy window that covers the whole screen,
  28.   // to prevent this demo from overwriting the existing screen
  29.   createwindow
  30.   setcolor 5 (color black on black)
  31.   display
  32.  
  33.   // get the screen dimensions
  34.   cols = getvidcols
  35.   rows = getvidrows
  36.  
  37.   // hide the mouse
  38.   hidemouse
  39.  
  40.   // make video functions use the actual physical screen,
  41.   // instead of the current window
  42.   gotoscreen
  43.  
  44.   // string to write
  45.   str = "░░░"
  46.  
  47.   // initial x,y position on the screen
  48.   x = (rand mod cols) + 1
  49.   y = (rand mod rows) + 1
  50.  
  51.   // do until an external event occurs
  52.   while not event? do
  53.  
  54.     // get next random x,y position
  55.     x = x + ((rand mod 3) - 1)
  56.     y = y + ((rand mod 3) - 1)
  57.  
  58.     // correct x,y if not within screen boundry
  59.     if x > cols then
  60.       x = cols
  61.     elseif x < 1 then
  62.       x = 1
  63.     end
  64.     if y > rows then
  65.       y = rows
  66.     elseif y < 1 then
  67.       y = 1
  68.     end
  69.  
  70.     // write the string
  71.     writestr str attr x y
  72.  
  73.     // change the string and color periodically
  74.     count = count + 1
  75.     if count > interval then
  76.       count = 0
  77.       interval = 700
  78.       // random color
  79.       attr = rand mod 256
  80.       // random string
  81.       str = { "░░░" "▒▒▒" } [(rand mod 2) + 1]
  82.     end
  83.  
  84.   end
  85.  
  86.   // absorb any keys entered
  87.   while keyhit? do
  88.     getkey
  89.   end
  90.  
  91.   // restore the screen
  92.   showmouse
  93.   destroywindow
  94.   videomode 80 oldrows
  95. end
  96.  
  97. // screen saver timer management
  98. function saver (f min)
  99.   // check for time expired
  100.   if f == -2 then
  101.     if ecount <> geteventcount then
  102.       ecount = geteventcount
  103.       settimer "saver2" min * 60000 obj
  104.     elseif not timer? "saver2" then
  105.       // call screen saver function
  106.       drawsaver
  107.       ecount = -1
  108.     end
  109.  
  110.   // start/stop the check timer
  111.   else
  112.     destroytimer "saver"
  113.     destroytimer "saver2"
  114.     ecount = -1
  115.     if f <> -1 then
  116.       setrepeat "saver" 1000 obj "saver" -2 f
  117.     end
  118.   end
  119. end
  120.  
  121. // check for a previous install
  122. obj = prf.saverobj
  123. if obj then
  124.   installed = TRUE
  125. else
  126.   obj = getcurrobj
  127.   prf.saverobj = obj
  128. end
  129.  
  130. macrofile = arg 1
  131.  
  132. // called by Lib.x when a key is entered in the dialog box
  133. function ondialog (keycode)
  134.   // macro help
  135.   if keycode == <f1> then
  136.     helpmacro macrofile
  137.   end
  138. end
  139.  
  140. // screen saver dialog box
  141. dialog "Screen Saver" 46 6 "c"
  142. field "Delay in minutes:  >"  11 2 6 10
  143. button "O&k"       3  5 8
  144. button "&Test"    14  5 8    whenenter "drawsaver"
  145. button "&Remove"  25  5 8
  146. button "Cancel"   36  5 8
  147.  
  148. case (getdialog ref minutes)
  149.   // install screen saver
  150.   when "Ok"
  151.     if minutes then
  152.       sendobject obj "saver" minutes
  153.       if not installed then
  154.         resident ON
  155.       end
  156.       queue "msgbox" "Screen Saver Installed, delay is " + minutes + " minutes."
  157.     end
  158.     // remove screen saver
  159.   when "Remove"
  160.     sendobject obj "saver" -1
  161.     destroyobject obj
  162.     destroyvar "saverobj" "prf"
  163.     queue "msgbox" "Screen Saver Removed."
  164. end
  165.